package com.github.phoenics.teacher.itheima.netty.first2;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

/**
 * @author Phoenics Chow
 * on 2020年03月18日
 */
public class FirstServerHandler extends ChannelInboundHandlerAdapter{
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        ByteBuf buf = (ByteBuf) msg;
        byte[] reg = new byte[buf.readableBytes()];
        buf.readBytes(reg);
        String body = new String(reg, "UTF-8");
        System.out.println("server data------->  "+body);
        /**
         预期结果:
         .......
         server data------->  需要更多资料加：54241669
         server data------->  需要更多资料加：54241669
         server data------->  需要更多资料加：54241669
         server data------->  需要更多资料加：54241669
         server data------->  需要更多资料加：54241669
         server data------->  需要更多资料加：54241669
         server data------->  需要更多资料加：54241669
         server data------->  需要更多资料加：54241669
         server data------->  需要更多资料加：54241669
         server data------->  需要更多资料加：54241669
         ......
         */


        /**
         从服务端的控制台输出可以看出，存在三种类型的输出

         一种是正常的字符串输出。

         一种是多个字符串“粘”在了一起，我们定义这种 ByteBuf 为粘包。

         一种是一个字符串被“拆”开，形成一个破碎的包，我们定义这种 ByteBuf 为半包。
         */
    }

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
        ctx.flush();
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        ctx.close();
    }

}
